#!/usr/bin/env python
# @FileName :练习.py
# @Time :2024/4/8 15:38
# @Author :syr030111

#函数1-判断密码长度是否超过8位（必须）
#函数2-判断是否包括大小写字母、数字、其他符号，至少包含三种
#函数3-判断是否有长度等于或超过3的子串重复
#函数4-判断密码的评分等级并附加需要改进之处，默认2分，以上三点满足一点加一分
#函数5-主函数，调用其它功能函数
import re




def length(x):
    return len(x) > 8

def type(x):
    w1 = any(char.islower() for char in x)
    w2 = any(char.isupper() for char in x)
    number = any(char.isdigit() for char in x)
    other = any(not char.isalnum() for char in x)
    return sum((w1,w2, number, other)) >= 3

def repeat(x):
    for i in range(len(x) - 2):
        for j in range(i + 1, len(x)):
            if  x[i:i + 3] == x[j:j + 3]:
                    return True
    return False

def score(x):
    grade = 2
    z = []
    if not length(x):
        z.append("密码长度应超过8位")
    else:
        grade += 1
    if not type(x):
        z.append("密码应包含至少三种不同类型的字符（大小写字母、数字、其他符号）")
    else:
        grade += 1
    if repeat(x):
        z.append("密码中不应有长度等于或超过3的子串重复")
    else:
        grade += 1

    return grade, z
def main():
    while True:
        x = input("请输入注册密码（长度必须超过8位，包含大小写字母、数字、其它符号中三种以上，不能有长度等于或超过3的子串重复）：")
        # length(x)
        # type(x)
        # repeat(x)
        grade, z = score(x)
        if len(x) <= 8:
            print("密码长度不够8位，请重新注册")
        else :
            print(f"密码评分：{grade}分")
            if z:
                print(f"需要改进之处：")
                for i in z:
                    print(f"-{i}")
            else:
                print("密码足够安全，无需改进")
            break

if __name__ == "__main__":
    main()




